home *** CD-ROM | disk | FTP | other *** search
/ Developer CD Series 1995 August: Tool Chest / Dev.CD Aug 95 TC / Dev.CD Aug 95 TC.toast / Sample Code / AOCE Sample Code / SampleTemplate / Sample Template / Source / AlbumCode1Page2.c < prev    next >
Encoding:
C/C++ Source or Header  |  1994-06-23  |  2.1 KB  |  102 lines  |  [TEXT/MPS ]

  1. #ifndef __ALBUM__
  2. #include "Album.h"
  3. #endif
  4.  
  5. #ifndef __OCETEMPLATES__
  6. #include <OCETemplates.h>
  7. #endif
  8.  
  9. static OSErr DoIdle(DETCallBlockPtr callBlockPtr);
  10.  
  11. pascal OSErr AlbumCode(DETCallBlockPtr callBlockPtr)
  12.     {
  13.     OSErr err = 1;
  14.     
  15.     if ((callBlockPtr->protoCall.reqFunction < kDETcmdTargetedCall) || (callBlockPtr->protoCall.target.selector == kDETSelf))
  16.         {
  17.         switch (callBlockPtr->protoCall.reqFunction)
  18.             {
  19.             case kDETcmdInit:
  20.                 callBlockPtr->init.newCallFors = kDETCallForIdle + kDETCallForViewChanges;
  21.                 break;
  22.             
  23.             case kDETcmdIdle:
  24.             case kDETcmdViewListChanged:
  25.                 err = DoIdle(callBlockPtr);
  26.                 break;
  27.  
  28.             }
  29.         }
  30.     
  31.     return err;
  32.     }
  33.  
  34. static OSErr GetPropertyNumber(DETCallBlockPtr callBlockPtr, short property, long *value)
  35.     {
  36.     OSErr err;
  37.     DETCallBackBlock cbb;
  38.     
  39.     cbb.getPropertyNumber.reqFunction = kDETcmdGetPropertyNumber;
  40.     cbb.getPropertyNumber.property = property;
  41.     cbb.getPropertyNumber.target.selector = kDETSelf;
  42.  
  43.     err = CallBackDET(callBlockPtr, &cbb);
  44.     
  45.     *value = cbb.getPropertyNumber.propertyValue;
  46.     
  47.     return err;
  48.     }
  49.  
  50. static OSErr GetNumSublistItems(DETCallBlockPtr callBlockPtr, long *num)
  51.     {
  52.     OSErr err;
  53.     DETCallBackBlock cbb;
  54.     
  55.     cbb.sublistCount.reqFunction = kDETcmdSublistCount;
  56.     cbb.sublistCount.target.selector = kDETSelf;
  57.  
  58.     err = CallBackDET(callBlockPtr, &cbb);
  59.     
  60.     *num = cbb.sublistCount.count;
  61.         
  62.     return err;
  63.     }
  64.  
  65. static OSErr SetPropertyNumber(DETCallBlockPtr callBlockPtr,
  66.                                short property,
  67.                                long newValue)
  68.     {
  69.     OSErr err;
  70.     DETCallBackBlock cbb;
  71.     
  72.     cbb.setPropertyNumber.reqFunction = kDETcmdSetPropertyNumber;
  73.     cbb.setPropertyNumber.property = property;
  74.     cbb.setPropertyNumber.target.selector = kDETSelf;
  75.     cbb.setPropertyNumber.newValue = newValue;
  76.  
  77.     err = CallBackDET(callBlockPtr, &cbb);
  78.     
  79.     return err;
  80.     }
  81.  
  82. static OSErr DoIdle(DETCallBlockPtr callBlockPtr)
  83.     {
  84.     OSErr err;
  85.     long oldNumber, actualNumber;
  86.     
  87.     err = GetPropertyNumber(callBlockPtr, prNumTracks, &oldNumber);
  88.     
  89.     if (err == noErr)
  90.         {
  91.         err = GetNumSublistItems(callBlockPtr, &actualNumber);
  92.         }
  93.  
  94.     if ((err == noErr) && (oldNumber != actualNumber))
  95.         {
  96.         err = SetPropertyNumber(callBlockPtr, prNumTracks, actualNumber);
  97.         }
  98.  
  99.     return err;
  100.     }
  101.  
  102.